package doing.doing_501_1000;

import lombok.extern.slf4j.Slf4j;
import org.junit.Test;

import java.util.*;

/**
 * 830. Positions of Large Groups 较大分组的位置
 * <p>
 * 在一个由小写字母构成的字符串 S 中，包含由一些连续的相同字符所构成的分组。
 * 例如，在字符串 S = "abbxxxxzyy" 中，就含有 "a", "bb", "xxxx", "z" 和 "yy" 这样的一些分组。
 * 我们称所有包含大于或等于三个连续字符的分组为较大分组。找到每一个较大分组的起始和终止位置。
 * 最终结果按照字典顺序输出。
 * <p>
 * 示例 1:
 * 输入: "abbxxxxzzy"
 * 输出: [[3,6]]
 * 解释: "xxxx" 是一个起始于 3 且终止于 6 的较大分组。
 *
 * @author 大硕
 * 2019-04-01 12:08 AM
 **/
@Slf4j
public class PositionsOfLargeGroups {

    @SuppressWarnings("all")
    public List<List<Integer>> largeGroupPositions(String S) {
        List<List<Integer>> list = new ArrayList<List<Integer>>();
        if (S.length() < 3)
            return list;

        //for循环的自增条件可以不写
        for (int i = 0; i < S.length(); ) {
            int j = i;

            //对于连续的计数 通常使用while
            while (j < S.length() && S.charAt(j) == S.charAt(i))
                j++;

            // 题目里提示大于3 是较大的分组
            if (3 <= j - i) {
                List<Integer> temp = new ArrayList<Integer>();
                temp.add(i);
                temp.add(j - 1);
                list.add(temp);
            }
            //该处可加自增量
            i = j;
        }
        return list;
    }

    @Test
    public void test() {
        log.info("{}", largeGroupPositions("abbxxxxzzy"));
    }
}


































/*
public List<List<Integer>> largeGroupPositions(String S) {
    List<List<Integer>> list = new ArrayList<>();

    if (S.length() < 3)
        return list;

    //for循环的自增条件可以不写
    for (int i = 0; i < S.length();) {
        int j = i;

        //对于连续的计数 通常使用while
        while (j < S.length() && S.charAt(j) == S.charAt(i))
            j++;

        // 题目里提示大于3 是较大的分组
        if (3 <= j - i) {
            List<Integer> temp = new ArrayList<Integer>();
            temp.add(i);
            temp.add(j - 1);
            list.add(temp);
        }
        //该处可加自增量
        i = j;
    }
    return list;
}
*/
